import bpy
import json
import os

# 选择要导出的曲线对象（确保已选中）
curve_obj = bpy.context.active_object

if curve_obj and curve_obj.type == 'CURVE':
    curve_data = curve_obj.data
    curve_points = []

    # 记录整个曲线的类型（假设所有样条类型相同）
    curve_type = "BEZIER"  # 默认类型，后续根据样条更新

    # 处理曲线的每个样条（spline）
    for spline in curve_data.splines:
        spline_points = []

        # 更新曲线类型（取第一个样条的类型）
        if curve_type == "BEZIER" and spline.type != "BEZIER":
            curve_type = spline.type

        if spline.type == 'BEZIER':
            # 贝塞尔曲线
            for point in spline.bezier_points:
                # 只提取坐标和手柄位置，不包含类型信息
                point_data = {
                    'co': [point.co.x, point.co.y, point.co.z],
                    'handle_left': [point.handle_left.x, point.handle_left.y, point.handle_left.z],
                    'handle_right': [point.handle_right.x, point.handle_right.y, point.handle_right.z]
                }
                spline_points.append(point_data)

        elif spline.type == 'POLY':
            # 多边形曲线（直线段）
            for point in spline.points:
                point_data = {
                    'co': [point.co.x, point.co.y, point.co.z, point.co.w]  # 包含权重
                }
                spline_points.append(point_data)

        curve_points.append(spline_points)

    # 构建导出数据结构
    export_data = {
        'name': curve_obj.name,
        'type': curve_type,  # 使用第一个样条的类型作为曲线类型
        'resolution_u': curve_data.resolution_u,  # 曲线分段精度
        'splines': curve_points
    }

    # 导出为 JSON 文件
    output_path = "C:/path/to/export/curve_data.json"  # 修改为你的实际路径

    # 确保目录存在
    directory = os.path.dirname(output_path)
    if not os.path.exists(directory):
        os.makedirs(directory)

    with open(output_path, 'w') as f:
        json.dump(export_data, f, indent=2)

    print(f"曲线数据已导出到: {output_path}")
else:
    print("请先选择一个曲线对象！")